﻿using ConfExpert.Forms.Base;
using ConfExpert.Properties;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using DevTeam;

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.Aksesuar
{
    public partial class AksesuarKartTalebi : XForm
    {
        public AksesuarKartTalebi()
        {
            InitializeComponent();
        }

        private void AksesuarKartTalebi_Load(object sender, EventArgs e)
        {
            
            gvAksesuarTalep.Init("GetAksesuarKartTalebi", WhoAmI, chkOncekiTalepler.Checked);
            gvAksesuarTalep.AddAutoIncrementalPK("AksesuarKartTalebiId");

            DataTable dtBrand = gvAksesuarTalep.Dataset().Tables["Table1"];
            DevExpress.XtraEditors.Repository.RepositoryItemGridLookUpEdit gle = GetCustomGLE(dtBrand, "Brand", "BrandId");
            gvAksesuarTalep.Columns["BrandId"].ColumnEdit = gle;

            gvAksesuarTalep.MakeColumnsReadOnly("OlusturanId", "OnaylayanId","IletilmeTarihi","OnayTarihi","State");
            gvAksesuarTalep.MakeColumnInvisible("AksesuarKartTalebiId", "Durum", "Yeni","UreticiRenkKodu","MusteriRenkKodu");

            GridManager gm = GridManager.GetManager(gvAksesuarTalep);
            gm.GridMenu.AddMenu("Talebi İlet", Talep_Ilet, Resources.Plus_16x16);

            chkOncekiTalepler.CheckedChanged += chkOncekiTalepler_CheckedChanged;
            gvAksesuarTalep.DataTable().TableNewRow += AksesuarKartTalebi_TableNewRow;
            gvAksesuarTalep.RowStyle += gridView1_RowStyle;
            btnKaydet.ItemClick += btnKaydet_ItemClick;

            gvAksesuarTalep.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
            gvAksesuarTalep.BestFitColumns();
            gvAksesuarTalep.EnableRowDelete();
        }

        void gridView1_RowStyle(object sender, RowStyleEventArgs e)
        {
            GridView gvAksesuar = sender as GridView;

            if (gvAksesuar.GetRowCellValue(e.RowHandle, "Durum") != null)
            {
                if (gvAksesuar.GetRowCellValue(e.RowHandle, "Durum").ToString() == "True")
                    e.Appearance.ForeColor = Color.Green;
                else if (gvAksesuar.GetRowCellValue(e.RowHandle, "Durum").ToString() == "False")
                    e.Appearance.ForeColor = Color.Red;
            }
        }
 

        void chkOncekiTalepler_CheckedChanged(object sender, ItemClickEventArgs e)
        {
            gvAksesuarTalep.RefreshDataSource("GetAksesuarKartTalebi", WhoAmI, chkOncekiTalepler.Checked);
            gvAksesuarTalep.BestFitColumns();
        }
        
        void AksesuarKartTalebi_TableNewRow(object sender, System.Data.DataTableNewRowEventArgs e)
        {
            e.Row["OlusturanId"] = WhoAmI;
        }

        void btnKaydet_ItemClick(object sender, ItemClickEventArgs e)
        {
            Check();

            gvAksesuarTalep.Update("", "AksesuarKartTalebi");
            gvAksesuarTalep.RefreshDataSource("GetAksesuarKartTalebi", WhoAmI, chkOncekiTalepler.Checked);
        }

        private void Check()
        {
            gvAksesuarTalep.EndEditing();

            DataRow[] drAksesuarTalep = gvAksesuarTalep.DataTable().Select("Isnull(State,'İLETİLMEDİ') = 'İLETİLMEDİ'");
            DataTable dtAksesuarTalep = null;
            if (drAksesuarTalep.Length > 0)
                dtAksesuarTalep = drAksesuarTalep.CopyToDataTable();
            else
                throw new ApplicationException("Aksesuar bilgisi girin!");

            if (dtAksesuarTalep.Select("ProductCategoryId is null").Length > 0)
                throw new ApplicationException("ProductCategoryId alanı boş olamaz!");

            if (dtAksesuarTalep.Select("OriginId is null").Length > 0)
                throw new ApplicationException("Orijin alanı boş olamaz!");

            if (dtAksesuarTalep.Select("BrandId is null").Length > 0)
                throw new ApplicationException("BrandId alanı boş olamaz!");

            if (dtAksesuarTalep.Select("VendorId is null and UreticiKodu is not null").Length > 0)
                throw new ApplicationException("Üretici girin!");

            foreach (DataRow drAksesuar in dtAksesuarTalep.Rows)
            {
                int BrandId = drAksesuar["BrandId"].ToInt();
                int ProductCategoryId = drAksesuar["ProductCategoryId"].ToInt();
                string Renk = drAksesuar["Renk"].ToStr();
                string Etiket = drAksesuar["Etiket"].ToStr();
                string Boy = drAksesuar["Boy"].ToStr();
                string Aciklama = drAksesuar["Aciklama"].ToStr();
                int AksesuarKaliteId = drAksesuar["AksesuarKaliteId"].ToInt();
                string UreticiKodu = drAksesuar["UreticiKodu"].ToStr();
                string MusteriKodu = drAksesuar["MusteriKodu"].ToStr();

                string sql = string.Format(
                    "BrandId = {0} and " +
                    "ProductCategoryId = {1} and  " +
                    "Isnull(Renk,'') = '{2}' and  " +
                    "Isnull(Etiket,'') = '{3}' and  " +
                    "Isnull(Boy,'') = '{4}' and " +
                    "Isnull(Aciklama,'') = '{5}' and " +
                    "Isnull(AksesuarKaliteId,0) = {6} and " +
                    "Isnull(UreticiKodu,'') = '{7}' and " +
                    "Isnull(MusteriKodu,'') = '{8}' and State is null",
                    BrandId, ProductCategoryId, Renk, Etiket, Boy, Aciklama, AksesuarKaliteId, UreticiKodu, MusteriKodu);

                DataRow[] drAksesuarAyni = dtAksesuarTalep.Select(sql);

                if (drAksesuarAyni.Length > 1)
                    throw new ApplicationException("Aynı bilgilerle birden fazla kart talebi kaydetmeye çalışıyorsunuz");
            }

            string xml = dtAksesuarTalep.Serialize();
            DataTable dtAyni = ExecuteDataTable("GetAyniAksesuarKartTalebi", xml);
            if (dtAyni.Rows.Count > 0)
            {
                string Message = "";
                foreach (DataRow drAksesuar in dtAyni.Rows)
                    Message += drAksesuar["Aksesuar"].ToStr() + "\n";

                throw new ApplicationException("Aşağıdaki aksesuar önceden talep edildi.\n\n" + Message);
            }
        }

        void Talep_Ilet(object sender, EventArgs e)
        {
            Check();
            
            Random rnd = new Random();
            int yeni = rnd.Next();
            foreach (int rowHandle in gvAksesuarTalep.GetSelectedRows())
                if (rowHandle > -1)
                    gvAksesuarTalep.SetRowCellValue(rowHandle, "Yeni", yeni);

            gvAksesuarTalep.Update("","AksesuarKartTalebi");
            DataTable dtAyniAksesuar = ExecuteDataTable("GetAksesuarKartTalebiAndAksesuar", WhoAmI);

            if (dtAyniAksesuar.Rows.Count > 0)
            {
                using (AksesuarKartAyni transfer = new AksesuarKartAyni(dtAyniAksesuar))
                    transfer.ShowDialog();
            }
            else
                ExecuteNonQuery("UpdAksesuarKartTalebi", yeni);

            gvAksesuarTalep.RefreshDataSource("GetAksesuarKartTalebi", WhoAmI, chkOncekiTalepler.Checked);
                
        }
    }
}
